﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using WorkFlowBLL;
using Library;

namespace QLCF.Forms
{
    public partial class frmCategory : Form
    {
        private int categoryID = -1;        
        private Boolean isAddData = false;
        private Boolean isLoading = true;

        public int permission = 0;

        public frmCategory()
        {
            InitializeComponent();            
        }

        private void frmCategory_Load(object sender, EventArgs e)
        {
            BindData();
            BindCbxStatus();
            permission = CtrAdmin.GetPermission(Program.UserEntity.Permission, Config.Enum.Function.frmCategory);           
            DisplayControls(false);            
        }

        private void BindData()
        {
            CtrCategory ctrCategory = new CtrCategory();
            var objCate = ctrCategory.GetListCategory(-1);
            if (objCate.Count > 0)
            {
                grvCategory.AutoGenerateColumns = false;
                grvCategory.DataSource = objCate;
                this.isLoading = false;
                grvCategory.Select();
            }
        }
        

        private void BindCbxStatus()
        {
            cbxStatus.Items.Clear();
            cbxStatus.DisplayMember = "text";
            cbxStatus.ValueMember = "value";
            List<EntityBLL.ListItem> lst1 = new List<EntityBLL.ListItem>();
            lst1.Add(new EntityBLL.ListItem(1, "Hoạt động"));
            lst1.Add(new EntityBLL.ListItem(0, "Khóa"));
            cbxStatus.DataSource = lst1;
            cbxStatus.SelectedValue = 1;
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }
 
        private void btnAdd_Click(object sender, EventArgs e)
        {
            this.btnAdd.Enabled = false;
            this.btnCancel.Visible = true;
            this.isAddData = true;
            this.txtCategoryName.Focus();
            this.btnDelete.Enabled = false;
            this.txtCategoryName.Text = "";
            DisplayControls(true);
            btnEdit.Enabled = true;            
            //clsControls.ClearTextBox(this);   
        }

        private void btnEdit_Click(object sender, EventArgs e)
        {
            if (this.txtCategoryName.Text == "")
            {
                MessageBox.Show("Bạn chưa nhập tên chuyên mục", "Thông báo...", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                this.txtCategoryName.Focus();
                return;
            }

            if (!this.isAddData)
            {
                CtrCategory ctrCategory = new CtrCategory();
                var objReturn = ctrCategory.UpdateCategory(categoryID, this.txtCategoryName.Text.Trim().Replace("'", "''"), Convert.ToInt16(cbxStatus.SelectedValue));
                if (objReturn > 0)
                {
                    CtrAdmin ctra = new CtrAdmin();
                    ctra.LogInsert(Program.UserEntity.UserID, Program.UserEntity.UserName, 2, "Cập nhật danh mục \"" + this.txtCategoryName.Text.Trim().Replace("'", "''") + "\" có mã \"" + categoryID + "\"", "Quản lý danh mục");
                    MessageBox.Show("Cập nhật thành công !", "Thông báo...", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    DisplayControls(false);
                    this.BindData();
                    return;
                }
            }
            else
            {
                CtrCategory ctrCategory = new CtrCategory();
                var objReturn = ctrCategory.InsertCategory(this.txtCategoryName.Text.Trim().Replace("'", "''"), Convert.ToInt16(cbxStatus.SelectedValue));
                if (objReturn > 0)
                {
                    CtrAdmin ctra = new CtrAdmin();
                    ctra.LogInsert(Program.UserEntity.UserID, Program.UserEntity.UserName, 1, "Thêm mới chuyên mục \"" + txtCategoryName.Text.Trim() + "\" có mã \"" + objReturn + "\"", "Quản lý danh mục");
                    MessageBox.Show("Thêm mới thành công !", "Thông báo...", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    this.BindData();
                    return;
                }
            }
        }



        private void btnDelete_Click(object sender, EventArgs e)
        {
            if (grvCategory.RowCount == 0)
            {
                MessageBox.Show("Chưa chọn bản ghi cần xóa?", "Thông báo...", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            if (MessageBox.Show("Có đồng ý xoá bản ghi này không?", "Thông báo...", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return;

            CtrCategory ctrCategory = new CtrCategory();
            var objCate = ctrCategory.DeleteCategoryID(categoryID);
            if (objCate > 0)
            {
                CtrAdmin ctra = new CtrAdmin();
                ctra.LogInsert(Program.UserEntity.UserID, Program.UserEntity.UserName, 3, "Xóa chuyên mục \"" + this.txtCategoryName.Text.Trim().Replace("'", "''") + "\" có mã \"" + this.categoryID + "\"", "Quản lý danh mục");
                MessageBox.Show("Xóa chuyên mục thành công!", "Thông báo...", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                this.BindData();
                return;
            }
            else
            {
                MessageBox.Show("Đang tồn tại sản phẩm cho chuyên mục này!", "Thông báo...", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
        }

        private void grvCategory_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (this.isLoading) return;
                var row = e.RowIndex;
                //this.btnDelete.Enabled = true;
                this.isAddData = false;
                txtCategoryName.Text = grvCategory.Rows[row].Cells["CategoryName"].Value.ToString();
                cbxStatus.SelectedValue = Convert.ToInt32(grvCategory.Rows[row].Cells["Status"].Value);
                categoryID = Convert.ToInt32(grvCategory.Rows[row].Cells["Category"].Value);
            }
            catch (Exception loi)
            {
                MessageBox.Show(loi.Message.ToString());
            }
        }

        private void grvCategory_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            try
            {
                SolidBrush b = new SolidBrush(grvCategory.RowHeadersDefaultCellStyle.ForeColor);
                e.Graphics.DrawString((e.RowIndex + 1).ToString(System.Globalization.CultureInfo.CurrentUICulture), grvCategory.DefaultCellStyle.Font, b, e.RowBounds.Location.X + 20, e.RowBounds.Location.Y + 4);
            }
            catch { }
        }

        private void btnBack_Click(object sender, EventArgs e)
        {
            //this.btnAdd.Enabled = true;
            this.txtCategoryName.Text = "";
            DisplayControls(false);
        }

        private void DisplayControls(bool m_new)
        {
            isAddData = m_new;
            btnAdd.Enabled = !m_new;            
            btnCancel.Enabled = m_new;
            btnDelete.Enabled = !m_new;
            if ((permission & (int)Config.Enum.Permission.Add) != (int)Config.Enum.Permission.Add)
                btnAdd.Enabled = false;

            if ((permission & (int)Config.Enum.Permission.Edit) != (int)Config.Enum.Permission.Edit)
                btnEdit.Enabled = false;

            if ((permission & (int)Config.Enum.Permission.Delete) != (int)Config.Enum.Permission.Delete)
                btnDelete.Enabled = false;
        }
    }
}
